package io.mft.commons.db.mapper.transaction;

/**
 * 事务执行
 * @类型名称：MapperTransactionExecutor
 * @说明：TODO
 * @创建者: 胡常建  
 * @创建时间: 2018年4月21日 上午10:33:25
 * @修改者: 胡常建  
 * @修改时间: 2018年4月21日 上午10:33:25
 */
public class MapperTransactionExecutor {
	
	
	private MapperDbHandler dbHandler;
	public MapperTransactionExecutor(MapperDbHandler dbHandler) {
		this.dbHandler=dbHandler;
	}
	/**
	 * 执行数据库事务操作
	 * @方法名称: execute
	 * @参数 @param args  动态参数
	 * @参数 @return
	 * @参数 @throws Exception
	 * @说明: TODO
	 * @返回类型 Object    
	 * @创建者: 胡常建  
	 * @创建时间: 2018年4月21日 上午11:02:20
	 * @修改者: 胡常建  
	 * @修改时间: 2018年4月21日 上午11:02:20
	 */
	public Object execute(Object ...args) throws Exception {
		MapperTransaction mapperTransaction=null;
		try {
			mapperTransaction=MapperTransactionFactory.getInstance().build();
			mapperTransaction.begin();
			dbHandler.args=args;
			Object object=dbHandler.handle();
			mapperTransaction.commit();
			return object;
		} catch (Exception e) {
			if (mapperTransaction!=null) {
				mapperTransaction.rollback();
			}
			throw e;
		}finally {
			if (mapperTransaction!=null) {
				mapperTransaction.close();
			}
		}
	}
}
